package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICompanyCustomGroupingDAO;
import org.jsola.hr.dto.CompanyCustomGroupingAddDTO;
import org.jsola.hr.dto.CompanyCustomGroupingUpdateDTO;
import org.jsola.hr.entity.CompanyCustomGroupingDO;
import org.jsola.hr.query.CompanyCustomGroupingQuery;
import org.jsola.hr.vo.CompanyCustomGroupingListVO;
import org.jsola.hr.vo.CompanyCustomGroupingVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 自定义用工单位分组
 *
 * @author zhr
 */
public interface ICompanyCustomGroupingService extends IService<ICompanyCustomGroupingDAO, CompanyCustomGroupingDO> {

    /**
     * 新增自定义用工单位分组
     *
     * @param companyCustomGroupingAddDTO 新增自定义用工单位分组DTO
     * @param tokenUser                   当前用户
     * @return 自定义用工单位分组详情信息
     */
    CompanyCustomGroupingVO save(CompanyCustomGroupingAddDTO companyCustomGroupingAddDTO, TokenUser tokenUser);

    /**
     * 修改自定义用工单位分组
     *
     * @param companyCustomGroupingUpdateDTO 修改自定义用工单位分组DTO
     * @param tokenUser                      当前用户
     * @return 更新数量
     */
    int update(CompanyCustomGroupingUpdateDTO companyCustomGroupingUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除自定义用工单位分组，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser                当前用户
     * @param companyCustomGroupingIds 自定义用工单位分组id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... companyCustomGroupingIds);

    /**
     * 根据自定义用工单位分组id查找
     *
     * @param companyCustomGroupingId 自定义用工单位分组id
     * @param siteId                  所属站点id
     * @return 自定义用工单位分组详情信息
     */
    CompanyCustomGroupingVO selectById(Long companyCustomGroupingId, String siteId);

    /**
     * 查询自定义用工单位分组
     *
     * @param companyCustomGroupingQuery 查询条件
     * @param siteId                     所属站点id
     * @return 自定义用工单位分组列表信息
     */
    List<CompanyCustomGroupingListVO> select(CompanyCustomGroupingQuery companyCustomGroupingQuery, String siteId);

    /**
     * 查询自定义用工单位分组记录数
     *
     * @param companyCustomGroupingQuery 查询条件
     * @param siteId                     所属站点id
     * @return 自定义用工单位分组记录数
     */
    int selectCount(CompanyCustomGroupingQuery companyCustomGroupingQuery, String siteId);

    /**
     * 分页查询自定义用工单位分组
     *
     * @param companyCustomGroupingQuery 查询条件
     * @param siteId                     所属站点id
     * @return 自定义用工单位分组列表信息
     */
    Page<CompanyCustomGroupingListVO> selectPage(CompanyCustomGroupingQuery companyCustomGroupingQuery, String siteId);


    /**
     * 根据自定义用工单位分组id查找
     *
     * @param companyCustomGroupingId 自定义用工单位分组id
     * @param siteId                  所属站点id
     * @return 自定义用工单位分组
     */
    CompanyCustomGroupingDO selectDOById(Long companyCustomGroupingId, String siteId);


    /**
     * 查询自定义用工单位分组
     *
     * @param companyCustomGroupingQuery 查询条件
     * @param siteId                     所属站点id
     * @return 自定义用工单位分组列表
     */
    List<CompanyCustomGroupingDO> selectDO(CompanyCustomGroupingQuery companyCustomGroupingQuery, String siteId);

    /**
     * 根据租户id查找
     *
     * @param yearly    年
     * @param monthly   月
     * @param tokenUser 当前用户
     * @return 自定义用工单位分组
     */
    List<CompanyCustomGroupingDO> selectAndSaveBySiteAndMonthly(Integer yearly, Integer monthly, String moduleCode, TokenUser tokenUser);
}


